package com.lhs.config;

import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;



@Configuration
public class SaTokenGatewayConfig {

    private static final String ADMIN_ROLE = "admin";

    // 放行路径常量定义
    private static final String[] EXCLUDE_PATHS = {
        "/favicon.ico",
        "/user/login",
        "/user/register",
        "/actuator/gateway"
    };

    // Sa-Token 全局过滤器（WebFlux 专用）
    @Bean
    public SaReactorFilter saReactorFilter() {
        return new SaReactorFilter()
                // 拦截所有请求
                .addInclude("/**")
                // 放行接口（登录、注册、验证码等）
                .addExclude(EXCLUDE_PATHS)
                // 认证逻辑
                .setAuth(obj -> {
                    // 登录校验
                    SaRouter.match("/**").check(r -> StpUtil.checkLogin());

                    // 权限认证
                    SaRouter.match("/user/admin/**", r -> StpUtil.checkRole(ADMIN_ROLE));


                })
                // 异常处理
                .setError(e -> {
                    // 避免暴露敏感异常信息，统一返回通用错误提示
                    return SaResult.error("鉴权失败，请检查登录状态或权限");
                });
    }

}
